﻿// 文件使用MiniExcel源码， 使用时需遵循其 Apache License 2.0
// 修改摘要通知： 删除异步、Task等net2.0中不支持的内容，替换原先C#自带的zip处理方式，改用yacomp 进行解压缩。
using System;
using System.Collections.Generic;

namespace ExcelConfig.Utils
{
    internal class ConcurrentDictionary<Tkey, Tval> : Dictionary<Tkey, Tval>
    {
        public delegate Tval UpdateFD(Tkey key, Tval val);
        public delegate Tval UpdateFD2(Tkey key);
        public void AddOrUpdate(Tkey key, Tval val, UpdateFD func_update)
        {
            lock (this)
            {
                if (ContainsKey(key)) this[key] = func_update(key, this[key]);
                else this[key] = val;
            }
        }
        public Tval GetOrAdd(Tkey key, UpdateFD2 func_init)
        {
            lock (this)
            {
                if (ContainsKey(key)) return this[key];
                return this[key] = func_init(key);
            }
        }
    }
}
